package com.custom.tools.biz;

/**
 * 提供对于service中的业务做统一处理
 * @author XiaoBai
 * @since 2023/9/7 0007 20:37
 */
public interface CustomProcess<Resp> {


    /**
     * 1.前提条件，该方法可做参数的预处理以及是否能够继续进行下一步的业务判断
     */
    void doingBefore();

    /**
     * 2.初始化，对即将需要处理的数据做一些准备或初始化
     */
    void doingInit();

    /**
     * 3.开始执行业务逻辑处理
     */
    void doingRunning();

    /**
     * 4.处理完业务以后的完善或收尾工作
     */
    void doingAfter();

    /**
     * 5.获取处理完以后的结果(该方法内尽量不要做逻辑处理，只需要获取指定的结果就行)
     */
    Resp getResult();

    /**
     * 快速处理，可通过该方法一次执行所有步骤，获得结果
     */
    default Resp getFastResult() {
        this.doingBefore();
        this.doingInit();
        this.doingRunning();
        this.doingAfter();
        return this.getResult();
    }

}
